package com.medsys.delegate;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.medsys.appservice.ConsultaAppService;
import com.medsys.appservice.MedicoAppService;
import com.medsys.appservice.PacienteAppService;
import com.medsys.model.Consulta;
import com.medsys.model.Medico;
import com.medsys.model.Paciente;
import com.medsys.view.Menu;

public class ConsultaDelegate {
	
	private static ConsultaAppService consultaService = new ConsultaAppService(); 
	private static MedicoAppService medicoService = new MedicoAppService(); 
	private static PacienteAppService pacienteService = new PacienteAppService();	
	private static Consulta consulta = null; 
	private static List<Consulta> consultas = null; 
	private static Medico medico = null; 
	private static Paciente paciente = null; 	
	private static Menu menu = Menu.getInstance(); 
	
	public void cadastrar(){
		
		System.out.println("*** Cadastro de Consulta ***");
		
		int idMedico = menu.readInt("Informe o ID do medico: ");
		int idPaciente = menu.readInt("Informe o ID do paciente: ");		
		medico = medicoService.pesquisarPorId(new Long(idMedico));
		paciente = pacienteService.pesquisarPorId(new Long(idPaciente));
		
		Date data = menu.readDate("Data e Hora (dd/mm/yyyy hh:mm:ss): ");
	
		consulta = new Consulta();
		consulta.setStatus("Marcada");
		consulta.setData(data);		
		consulta.setMedico(medico);
		consulta.setPaciente(paciente);
						
		consultaService.salvar(consulta);
		
		System.out.println("Consulta cadastrada com sucesso.");
		menu.readStr("Pressione <ENTER> para continuar");
		
	}
	
	public void consultar(){
		
		System.out.println("*** Consulta de Consulta ***");
		
		System.out.println("1 - Por ID");
		System.out.println("2 - Por Periodo");
		int op = menu.readInt("Digite uma opcao: ");
		
		if(op == 1){
			int id = menu.readInt("Digite o ID da Consulta: ");
			consulta = new Consulta();
			consulta = consultaService.pesquisarPorId(new Long(id));
			//consulta = consultaService.recuperarConsultaERelatorios(new Long(id));
			System.out.println(consulta.toString());
			menu.readStr("Pressione <ENTER> para continuar");
		}else if(op == 2){
			Date dataIni = menu.readDate("Data Inicial: ");
			Date dataFim = menu.readDate("Data Final: ");
			consultas = new ArrayList<Consulta>();			
			consultas = consultaService.pesquisarPorPeriodo(dataIni, dataFim);
			System.out.println(consultas.toString());
			menu.readStr("Pressione <ENTER> para continuar");
		}else{
			System.out.println("Opcao invalida.");
		}
		

	}
	
	public void atualizar(){
		
		System.out.println("*** Atualizacao de Consulta ***");
		int id = menu.readInt("Digite o ID da Consulta que deseja alterar: ");
		
		Consulta consulta = new Consulta();
		//consulta = consultaService.pesquisarPorId(new Long(id));
		
		System.out.println("Digite as novas informacoes:");
		int idMedico = menu.readInt("Informe o ID do novo medico: ");
		int idPaciente = menu.readInt("Informe o ID do novo paciente: ");		
		medico = medicoService.pesquisarPorId(new Long(idMedico));
		paciente = pacienteService.pesquisarPorId(new Long(idPaciente));		
		Date data = menu.readDate("Nova Data e Hora (dd/mm/yyyy hh:mm:ss): ");
		String status = menu.readStr("Informe o novo status da consulta: ");
	
		
		consulta.setIdConsulta(new Long(id));
		consulta.setStatus(status);
		consulta.setData(data);
		consulta.setMedico(medico);
		consulta.setPaciente(paciente);
		
		consultaService.alterar(consulta);
		menu.readStr("Pressione <ENTER> para continuar");
		
//		System.out.println("*** Atualizacao de Consulta ***");
//		
//		int idMedico = menu.readInt("Informe o ID do novo medico: ");
//		int idPaciente = menu.readInt("Informe o ID do novo paciente: ");		
//		medico = medicoService.pesquisarPorId(new Long(idMedico));
//		paciente = pacienteService.pesquisarPorId(new Long(idPaciente));
//		
//		Date data = menu.readDate("Nova Data e Hora (dd/mm/yyyy hh:mm:ss): ");
//		String status = menu.readStr("Informe o novo status da consulta: ");
//	
//		consulta = new Consulta();
//		consulta.setStatus(status);
//		consulta.setData(data);		
//		consulta.setMedico(medico);
//		consulta.setPaciente(paciente);
//						
//		consultaService.alterar(consulta);
//		
//		System.out.println("Consulta atualizada com sucesso.");
		
		
		
	}
	


}
